package self.example.explore.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author 1.
 * @version 1.0
 * @description: 任务调度器
 * @date 2023/4/12 18:28
 */
//@Slf4j
@Component
@EnableScheduling
public class Scheduler {
    int t = 0;

    /**
     *  基于单线程执行，多个 task 同时执行会引起阻塞，前一个 task 的执行回影响其他 task，造成定时任务无法定时执行的错觉
     *  cron表达式
    * */

    @Scheduled(cron = "10,20 * * * * *") // 每分钟的第10秒和第20秒都会执行一次
    public void task1() {
        System.out.println(LocalDateTime.now().toLocalTime());
        System.out.println("task1 run ..." + (++t));
//        log.error("task1 run ..." + (++t));
    }

    @Scheduled(cron = "10 * * * * *") // 每分钟的第10秒执行
    public void task2() {
        System.out.println(LocalDateTime.now().toLocalTime());
        System.out.println("task2 run ...");
//        log.error("task2 run ...");
    }

    @Scheduled(cron = "* */1 * * * *") // 分钟域无法脱离更高域存在，一般用于指定在更高域中单位为min的执行时刻
    public void task3() {
        System.out.println(LocalDateTime.now().toLocalTime());
        System.out.println("task3 run ...");
    }
}
